package com.example.service;

import java.time.LocalDate;
import java.util.List;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.domain.entity.AutoScheduleSetting;
import com.example.domain.entity.Schedule;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.domain.query.ScheduleQuery;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author baomidou
 * @since 2025-05-14
 */
public interface IScheduleService extends IService<Schedule> {
    IPage<Schedule> pageQuery(ScheduleQuery query, int pageNum, int pageSize);

    // 以某天为基准，查询当天或当周或当月的所有日程
    // date 为查询的日期， range为查询的范围，day为当天， week为一周，month为一月
    // personId 为人员编号，若为null则查询所有人的排班
    public List<Schedule> getSchedules(LocalDate date, String range, Integer personId);

    // 根据设置自动排班。
    // 若人员过多（可满足排班设置中的每班人次，且每个人员的休息时间可大于设置中的时间），则返回人员偏多(但也需要完成排班操作)
    // 若人员过少（在人员休息时间小于设置中的时间的情况下，才能完成排班设置中的每班人次），则返回人员偏少（但也需要完成排班操作）
    String autoSchedule(AutoScheduleSetting setting);

    /**
     * 员工请假
     * @param schedule 请假信息，包含请假人、日期、班次、替班人等
     * @return 是否成功
     */
    boolean applyLeave(Schedule schedule);

    /**
     * 审核请假
     * @param scheduleId 请假记录ID
     * @param approved 是否批准
     * @return 是否成功
     */
    boolean reviewLeave(Integer scheduleId, Boolean approved);
}
